Solidity 中常見的錯誤處理方法 require()、assert() 和 revert()
1. require 函數
用於驗證輸入參數或某些條件是否滿足。如果條件不滿足,require 會恢復狀態變更 並返回剩餘的 gas。
假設有一個簡單的銀行合約,允許用戶取款,但用戶只能取出自己擁有的餘額:
3. revert 函數
是一種手動觸發錯誤的方式,可用於更靈活的錯誤處理。例如當某些複雜條件不滿足 時,revert 可以立即停止合約的執行,並返回錯誤消息。
4. 自定義錯誤 (Solidity 0.8.4+)
這是Solidity 新增了自定義錯誤功能,這使得錯誤處理更具描述性,並且節省 gas。
語法:error Unauthorized(address caller);
總結
* require 用於檢查輸入或外部條件,若不滿足則恢復狀態變更,並退還 gas。
* assert 用於內部狀態驗證,確保不變量在執行過程中保持不變,若失敗則消耗所有 gas。
* revert 用於手動觸發錯誤,並返回錯誤消息,允許更細緻的錯誤處理。
* 自定義錯誤 提供更靈活的錯誤信息,並節省 gas。